﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int m, n;
    int x, y;
    cin >> m >> n >> x >> y;
    vector<vector<long long>> dp(m + 2, vector<long long>(n + 2, 0));
    dp[0][1] = 1;
    for (int i = 1; i <= m + 1; ++i)
    {
        for (int j = 1; j <= n + 1; ++j)
        {
            if (abs(i - 1 - x) + abs(j - 1 - y) == 3 && i - 1 != x && j - 1 != y || (i - 1 == x && j - 1 == y))
            {
                dp[i][j] = 0;
            }
            else
            {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
    }
    cout << dp[m + 1][n + 1] << endl;
}

/*
描述
棋盘上 A点有一个过河卒，需要走到目标 B点。卒行走的规则：可以向下、或者向右。
同时在棋盘上 C 点有一个对方的马，该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示，A 点 (0, 0)、B点(n,m)，同样马的位置坐标是需要给出的。
现在要求你计算出卒从 A点能够到达 B点的路径的条数，假设马的位置(x,y)是固定不动的，并不是卒走一步马走一步。

注：马一次跳跃到达的点(x1,y1)和马原坐标(x,y)的关系是∣x1−x∣+∣y1−y∣=3，且x1!=x,y1!=y

数据范围：1≤n,m≤20 ，马的坐标0≤x,y≤20，1≤a,b,c,d≤1000
输入描述：
仅一行，输入 n,m,x,y 四个正整数。分别表示B点坐标和马的坐标
输出描述：
输出路径总数

示例1
输入：
6 6 3 3
输出：
6
*/

